// 用于做权限鉴权的， 或者是一些权限控制， 比如菜单权限控制
// 通过一个钩子函数

import router from "@/router";
import NProgress from "nprogress";
import "nprogress/nprogress.css";
import { getToken } from "./utils/auth";

// 配置进度条
NProgress.configure({ showSpinner: false });

// 新版本可以使用async await
// 这里需要配置那些页面是不需要做校验的
// 也就是页面的白名单

const whiteList = ["/login"];
router.beforeEach((to) => {
  //
  NProgress.start();

  const hasToken = getToken();
  if (hasToken) {
    // 使用场景1： 用token换用户信息，
    if (to.path == "/login") {
      NProgress.done();
      return {
        path: "/",
        replace: true
      };
    }

    NProgress.done();
  } else {
    if (whiteList.includes(to.path)) {
      NProgress.done();
      return true;
    } else {
      // 这里需要注意，需要将登录之后的界面显示为当前访问的界面，包括其中的参数
      // 这里采用加入redirect的方式来实现。
      return {
        path: "/login",
        query: {
          // 这个参数需要在登录界面进行解析
          redirect: to.path,
          ...to.query
        }
      };
    }
  }
});

// 这里需要安装一个第三方npm包： nprogress 以及一个ts包：@types/nprogress
